﻿ 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SharpSoft.Documentation.Html.CSS
{
    /// <summary>
    /// 描述CSS标签选择器
    /// </summary>
    public struct TagRule : IRule
    {
        public TagRule(string tagname)
        {
            this._TagName = tagname;
            this._RelationType = CssSelectorRuleRelationType.And;
        }
        private string _TagName;
        /// <summary>
        /// 标签名称(注意：在应用选择器的场景，通配符*作为标签名称时应该特殊处理)
        /// </summary>
        public string TagName
        {
            get { return _TagName; }
            set { _TagName = value; }
        }

        private CssSelectorRuleRelationType _RelationType;
        /// <summary>
        /// 获取或设置当前规则与下一个规则的关系，对于选择器中的最后一个规则，此设置无效
        /// </summary>
        public CssSelectorRuleRelationType RelationType
        {
            get { return _RelationType; }
            set { _RelationType = value;
                if (value!= CssSelectorRuleRelationType.And && TagName=="*")
                {
                    throw new CssSyntaxException(0,0,"通配符*之后的选择器不允许是限定位置关系的选择器（这有可能导致选择器应用场景的递归运算溢出。一般情况下通配符最好是单独出现来匹配全部标签。）");
                }
            }
        }

        public override string ToString()
        {
            return "标签规则：" + TagName;
        }

        //public INodeFilter ToNodeFilter()
        //{
        //    if (TagName=="*")
        //    {
        //        return new NodeTypeFilter(typeof(TagNode));
        //    }
        //    return new TagNameFilter(TagName);
        //}
    }

}
